//【注意】:
//1)、在nodejs中每个.js文件都是一个模块文件
//2)、在nodejs中每个.js文件都是一个封闭的空间，因为每个.js文件在运行时被一个匿名函数所包裹，匿名函数格式如下：
/*
function (exports, require, module, __filename, __dirname) {
    // module.exports = {};
    //exports = module.exports;
    //【注意】:在nodejs中每个.js文件都是一个封闭的空间

    exports.age = 20;

    module.exports.tel = 110;


    module.exports = {};
    
    let goods = '小米手机';
    let price = 3000;
    
    
    function  fn() {
          console.log('fn()方法在m1.js文件中...');
    }
    
    
    //arguments.callee属性：用来查看当前代码被包裹的函数
    console.log(arguments.callee.toString());

    // return module.exports;
    }
*/

//nodejs中自定义模块的语法：

//第一种：单个暴露:

// exports.属性名 = 属性值
// exports.方法名 = 方法体

//或：

//module.exports.属性名=属性值
//module.exports.方法名 = 方法体


exports.goods = '小米手机';
exports.price = 3000;

exports.fn = function(){
    console.log('fn()方法在m1.js文件中...');
}

module.exports.uname = '张三';
module.exports.age = 20

module.exports.myfn = function(){
    console.log('myfn()方法在m1.js文件中...');
}

//【注意】：
//1)、单个暴露与批量暴露不能在同一个模块文件中一起使用
//2)、为什么单个暴露与批量暴露不能一起使用？
//   exports是module.exports的引用，而module.exports是真实存在的，最终返回的是module.exports，代码演示如下：

/*
module  = {exports:{}};
exports = module.exports;
exports.t = 99;
console.log(exports,module.exports);

module.exports = {};
console.log(exports,module.exports);
*/

// let obj = {};
// let obj2 = obj;
// obj2.usr = '张三';
// console.log(obj,obj2);
// obj2 = {};  //给obj2重新分配内存空间
// console.log(obj,obj2);









//批量暴露：
let y = 99;
module.exports ={y,t:100,mydemo(){}}


// let goods = '小米手机';
// let price = 3000;


// function  fn() {
//       console.log('fn()方法在m1.js文件中...');
// }


//arguments.callee属性：用来查看当前代码被包裹的函数
// console.log(arguments.callee.toString());